﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    public partial  class  ComparativoProveedor
    {
      


        public decimal getMontoBaseTotal(dbGestionDataContext _db)
        {
            decimal result = 0;

            var q = (from i in _db.ComparativoItems
                     where i.idComparativo == this.idComparativo &
                     i.bitSel ==true
                     select i);
            if (q.Count() > 0)
            {
                result = q.Sum(p => p.totalBase-p.totalUso).Value;
            }


            return Math.Round(result, 2);
        }
        public decimal getMontoTotal(dbGestionDataContext _db)
        {
            decimal result = 0;

            var q = (from i in _db.ComparativoItems
                     where i.idComparativo == this.idComparativo &
                     i.bitSel == true
                     select i);
            if (q.Count() > 0)
            {
                if (this.item==1)
                result = q.Sum(p => p.total1).Value;
                if (this.item == 2)
                    result = q.Sum(p => p.total2).Value;
                if (this.item == 3)
                    result = q.Sum(p => p.total3).Value;
            }

            return Math.Round(result, 2);
        }
       
        public decimal getMontoContratadoTotal(dbGestionDataContext _db) 
        {
            decimal result = 0;

            var q = (from i in _db.ComparativoItemSelecPrv
                     where i.idComparativoProv == this.idinternal
                     select i);
            if (q.Count() > 0)
            {
                result = q.Sum(p => p.total ).Value;
            }


            return result;
        }

        public decimal getMontoUsoTotal(dbGestionDataContext _db,
                      int idComparativoProveedor)
        {
            decimal result = 0;

            var q = from i in _db.ComparativoItemSelecPrv
                     where  i.idComparativoProv== idComparativoProveedor
                     select i;
            
            if (q.Count() > 0)
            {
                result = q.Sum(p => p.totalUso).Value;
            }


            return result;
        }

        public void updateTotalContratoAll(dbGestionDataContext _db, int idComparativo)
        {

            // actualizamos al  proveedor selecionado de ComparativoProveedor
            // lo real contratado para su revision
            var aa = from a in _db.ComparativoProveedors
                     where a.idComparativo == idComparativo
                     select a;


            foreach (var a in aa)
            {

                a.totalContratado = a.getMontoContratadoTotal(_db);
                a.total = a.getMontoTotal(_db);

            }

            _db.SubmitChanges();

        }

        public void UpdateProveedorSeleccion(dbGestionDataContext  _db,
            int idcomparativo,
            int idproveedorSelec)

        {
            this.bitSeleccion = true;

            var q = from a in _db.ComparativoProveedors
                    where a.idComparativo == idcomparativo
                    select a;
            foreach (var i in q)
            {
                if (i.idinternal == idproveedorSelec)
                {
                    i.bitSeleccion = true;
                }
                else
                {
                    i.bitSeleccion = false;
                }
            }
            _db.SubmitChanges();

        }


         public int addProveedor(dbGestionDataContext _db, 
                                int idComparativo,
                                int idProveedor,
                                short item,
                                string condicion,
                                decimal total,
                                int idMoneda,
                                int idFormaPago,
                                decimal tipoCambio)
        {

                this.idComparativo=idComparativo;
                this.idProveedor = idProveedor;
                this.item=item;
                this.condicion=condicion;
                this.total=total;
                this.totalContratado=0;
                this.totalUso=0;
                this.idMoneda=idMoneda;
                this.idFormaPago=idFormaPago;
                this.tipoCambio=tipoCambio;
               



            _db.ComparativoProveedors.InsertOnSubmit(this);

            _db.SubmitChanges();


            return this.idinternal;
        }


         public void updateSelecProveedor(dbGestionDataContext _db)
         {
             this.bitSeleccion=true;
             _db.SubmitChanges();
         }

         public int updateProveedor(dbGestionDataContext _db,
                                int idProveedor,
                                string condicion,
                                decimal total,
                                int idMoneda,
                                int idFormaPago,
                                decimal tipoCambio)
         {

             
             this.idProveedor = idProveedor;
             this.condicion = condicion;
             this.total = total;
             this.idMoneda = idMoneda;
             this.idFormaPago = idFormaPago;
             this.tipoCambio = tipoCambio;

             _db.SubmitChanges();


             return this.idinternal;
         }


         public bool updateMonto(dbGestionDataContext _db)
         {

             this.total = this.getMontoContratadoTotal(_db );
             this.totalContratado = this.getMontoContratadoTotal(_db );
             _db.SubmitChanges();

             return true;
         }

         public bool updateMontoUso(dbGestionDataContext _db)
         {

             this.totalUso = this.getMontoUsoTotal(_db,this.idinternal);
             _db.SubmitChanges();
             return true;
         }

      

    }
}
